package com.cskaoyan.javase.oop3.innerclazz6.local4;

/**
 * @description: 局部内部类
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

import java.security.PublicKey;

/**
 * > 局部内部类是定义在一个方法或者一个作用域里面的类
 * > 它和成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内
 * > 将局部内部类看成是局部变量即可
 * > 静态内部类自身的特点
 * > 1，访问权限修饰符
 * 思考：局部变量有没有访问权限修饰符？
 * 局部变量的作用域仅限于方法内部，出了方法就没用了，它要访问权限修饰符干嘛？ 没有意义
 * 和局部变量一样，局部内部类也没有访问权限修饰符
 * > 2，成员特点
 * 思考:局部变量允许哪些成员变量?
 * 有没有静态局部变量? 局部变量随着方法而生效 局部和静态是不搭的两个概念
 * 局部内部类 同样没有静态的概念,除此之外 和普通类一样
 *
 * > 3，定义位置
 * 只要你能够想得到的局部位置,都可以定义局部内部类
 * 但是为了避免被开除,不要在除了方法之外的地方写
 * 局部内部类的作用：当我们在局部位置，碰到了一个麻烦的问题，需要使用类来解决
 * - 但是又不希望这个类被外界知道，这种情况需要使用局部内部类
 * 局部内部类的使用条件比较苛刻,轻易不要使用,用也要在方法里用
 * 局部内部类在使用前要有合适的理由，不然会自找麻烦
 *
 *
 * > 4，继承和实现
 * 和普通内部类一样 可以继承实现
 * 了解即可
 *
 */
public class Demo { //外部类
    public static void main(String[] args) {
        //int a  = 10;
        for (int i = 0; i < 1; i++) {
            class T{}
        }
        if (true){
            class T{}
        }
        //switch
    }
   static  {
        class S{}
    }

}

class EnclosedClazz { //外围类

    public void test() { //普通的成员方法
        //定义局部内部类
         class InnerLocalClazz{
            int a;
            private int b = 10;
            //Inner classes cannot have static declarations
            //static int c =100;
             static final  int D = 100; //静态常量是不需要类加载
             //Inner classes cannot have static declarations
             //static final  Demo DEMO = new Demo();//静态的引用类型常量 只有String不触发类加载
             public void test(){}
             //public static void test2(){}
        }
    }
}
